package com.kakarote.admin.entity.BO;

import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @author LDH
 * @version 1.0
 * @description: 飞书用户Details对象
 * @date 2022/7/27 14:54
 */
@Data
@ApiModel(value = "飞书用户Details对象", description = "飞书用户Details对象")
public class FlyUserDetailsBO {

    /**
     * 用户的union_id，不同ID的说明参见 https://open.feishu.cn/document/home/user-identity-introduction/introduction
     */
    public String unionId;
    /**
     * 租户内用户的唯一标识，用户的user_id
     */
    public String userId;
    /**
     * 用户的open_id，不同ID的说明参见
     */
    public String openId;
    /**
     * 用户名
     */
    public String name;
    /**
     * 英文名
     */
    public String enName;
    /**
     * 别名
     */
    public String nickname;
    /**
     * 性别
     * 0：保密
     * 1：男
     * 2：女
     */
    public String gender;

    /**
     * 用户状态
     */
    public FlyUserStatus status;
    /**
     * 用户头像
     */
    public Avatar avatar;
    /**
     * 部门id集合
     */
    public List<String> departmentIds;
    /**
     * 用户的直接主管的用户ID，ID值与查询参数中的user_id_type 对应。
     */
    public String leaderUserId;
    /**
     * 城市
     */
    public String city;
    /**
     * 国家或地区Code缩写，具体写入格式请参考
     */
    public String country;
    /**
     * 工位
     */
    public String workStation;
    /**
     * 入职时间 时间戳
     */
    public Integer joinTime;
    /**
     * 是否是租户超级管理员
     */
    public Boolean isTenantManager;
    /**
     * 工号
     */
    public String employeeNo;
    /**
     * 用户排序信息
     */
    public List<Orders> orders;
    /**
     * 员工类型
     * 1：正式员工
     * 2：实习生
     * 3：外包
     * 4：劳务
     * 5：顾问
     */
    public Integer employeeType;
    /**
     * 企业邮箱，请先确保已在管理后台启用飞书邮箱服务
     */
    public String enterpriseEmail;
    /**
     * 职务
     */
    public String jobTitle;

    /**
     * 主要部门id
     */
    public String directDeptId;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class FlyUserStatus {
        /**
         * 是否暂停
         */
        private Boolean isFrozen;
        /**
         * 是否离职
         */
        private Boolean isResigned;
        /**
         * 是否激活
         */
        private Boolean isActivated;
        /**
         * 是否主动退出，主动退出一段时间后用户会自动转为已离职
         */
        private Boolean isExited;
        /**
         * 是否未加入，需要用户自主确认才能加入团队
         */
        private Boolean isUnjoin;

        /**
         * 是否是正常员工
         *
         * @return
         */
        public boolean isNormal() {
            return !this.isFrozen && !isResigned && isActivated && !isExited && !isUnjoin;
        }
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Avatar {
        /**
         * 72*72像素头像链接
         */
        @JSONField(name = " avatar_72")
        private String avatar72;
        /**
         * 240*240像素头像链接
         */
        @JSONField(name = " avatar240")
        private String avatar240;
        @JSONField(name = " avatar640")
        /** 640*640像素头像链接 */
        private String avatar640;
        /**
         * 原始头像链接
         */
        private String avatarOrigin;
    }


    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Orders {
        /**
         * 排序信息对应的部门ID
         */
        private String departmentId;
        /**
         * 用户在其直属部门内的排序，数值越大，排序越靠前
         */
        private Integer userOrder;
        /**
         * 用户所属的多个部门间的排序，数值越大，排序越靠前
         */
        private Integer departmentOrder;
    }
}


